package HongPro;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

// 키보드로 전송 문자열 입력받아서 서버로 전송하는 스레드
class WriteThread {
	Socket socket;
	ClientFrame cf;
	String str;
	String id;

	public WriteThread(ClientFrame cf) {
		this.cf = cf;
		this.socket = cf.socket;
	}

	public void sendMsg() {
		// 키보드로부터 읽어오기 위한 스트림객체 생성
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		// PrintWriter pw=null;
		BufferedOutputStream bout = null;
		try {
			// 서버로 문자열 전송하기 위한 스트림 객체 생성
			bout = new BufferedOutputStream(socket.getOutputStream());
			// 첫번째 데이터는 id, 상대방에게 id와 함께 내 ip를 전송함
			if (cf.isFirst == true) {
				InetAddress iaddr = socket.getLocalAddress();
				String ip = iaddr.getHostAddress();
				getId();
				System.out.println("ip:" + ip + "id:" + id);
				str = "[" + id + "] 님 로그인 (" + ip + ")";
			} else {
				str = "[" + id + "] " + cf.txtF.getText();
			}
			bout.write(str.getBytes());
			bout.flush();

		} catch (IOException ie) {
			System.out.println(ie.getMessage());
		} finally {
			try {
				if (br != null)
					br.close();
				// if(pw!=null) pw.close();
				// if(socket!=null) socket.close();
			} catch (IOException ie) {
				System.out.println(ie.getMessage());
			}
		}
	}

	public void getId() {
		id = Id.getId();
	}
}

// 서버가 보내온 문자열을 전송받는 스레드
class ReadThread extends Thread {
	Socket socket;
	ClientFrame cf;

	public ReadThread(Socket socket, ClientFrame cf) {
		this.cf = cf;
		this.socket = socket;
	}

	public void run() {
		// BufferedReader br=null;
		BufferedInputStream bin = null;
		try {

			// 서버로부터 전송된 문자열 읽어오기 위한 스트림 객체 생성
			bin = new BufferedInputStream(socket.getInputStream());
			byte b[] = new byte[255];
			int n = 0;
			String str;
			while (true) {
				// 소켓으로부터 문자열 읽어옴
				n = bin.read(b);
				str = new String(b, 0, n);
				cf.txtA.append(str + "\n");
			}
		} catch (IOException ie) {
			System.out.println(ie.getMessage());
		} finally {
			try {
				if (bin != null)
					bin.close();
				if (socket != null)
					socket.close();
			} catch (IOException ie) {
			}
		}
	}
}

public class MultiChatClient {
	public static void main(String[] args) {
		Socket socket = null;
		ClientFrame cf;
		try {
			socket = new Socket("192.168.10.129", 3000); // 접속하는 클라이언트는 ip를 서버ip로
													// 변경해서 포트는 동일하게 접속하면 됨.
			System.out.println("연결되었습니다.");

			cf = new ClientFrame(socket);
			new ReadThread(socket, cf).start();
		} catch (IOException ie) {
			System.out.println(ie.getMessage());
		}
	}
}
